home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Amiga Games: Greatest Hits 1996
/
Amiga Games: Greatest Hits 1996.iso
/
userbox
/
publicdomain
/
engclock_v7.0
/
engclock7_source
/
engclock_prefs.c
< prev
next >
Wrap
C/C++ Source or Header
|
1996-05-24
|
33KB
|
1,123 lines
/*
* Source machine generated by GadToolsBox V2.0
* which is (c) Copyright 1991-1993 Jaba Development
*
* GUI Designed by : -- Unnamed --
*/
#include <exec/types.h>
#include <intuition/intuition.h>
#include <intuition/classes.h>
#include <intuition/classusr.h>
#include <intuition/imageclass.h>
#include <intuition/gadgetclass.h>
#include <libraries/gadtools.h>
#include <graphics/displayinfo.h>
#include <graphics/gfxbase.h>
//#include <proto/exec.h>
//#include <proto/intuition.h>
//#include <proto/gadtools.h>
//#include <proto/graphics.h>
//#include <proto/utility.h>
//#include <proto/dos.h>
#include <string.h>
#include <stdio.h>
#include <dos/dos.h>
//#include <proto/asl.h>
#include <libraries/asl.h>
#include <clib/asl_protos.h>
#include <clib/exec_protos.h>
#include <clib/intuition_protos.h>
#include <clib/gadtools_protos.h>
#include <clib/graphics_protos.h>
#include <clib/utility_protos.h>
#include <clib/dos_protos.h>
#include <dos/dostags.h>
#include "EngClock_Prefs.h"
#define PREFS_FILE "s:engclock.prefs"
#define VERS 1 /* Version for backwards compat */
#define ID "EngCPrefs"
#define ENGLISH 1
#define FRENCH 2
#define SPANISH 3
short displevel(int code);
short drawspecial(void);
BOOL handlepgadgets(int iaddress, int code);
short writeprefs(void);
char *callasl(struct Window *win, char *title, char *initialdir);
void adaptlanguage(void);
void convertdate(int code);
int prefsgui(void);
BPTR handle2;
BOOL exit_flag2=FALSE;
char buffer[400];
extern struct Window *win_p;
extern struct TextAttr font1;
extern struct Screen *pubscreen;
extern char *publister(void);
extern void msg(char *msg);
extern void getdate(void);
extern char *analysis(char *fname);
extern int language;
extern BOOL locale;
extern struct Library *AslBase;
extern struct IntuitionBase *IntuitionBase;
extern struct GfxBase *GfxBase;
extern struct Library *UtilityBase;
extern struct Library *GadToolsBase;
extern struct Library *DiskfontBase;
extern struct Library *IFFParseBase;
extern struct Library *DataTypesBase;
extern struct Library *TranslatorBase;
extern struct Library *DOSBase;
char time1[50], time2[50];
int preset=1; /* Current preset for alarm events */
struct IntuiText level_text= {
1,0,JAM1,295,134,&font1,NULL,NULL };
struct Event {
BOOL used;
int type; /* Type of event */
int hours; /* Time of event */
int minutes;
int timecode;
char message[256];
int day;
int month;
int year;
BOOL enabledate;
int freq;
};
extern struct {
/* Prefs structure used for preferences file format */
char header[10]; /* I.D. Header */
int vers; /* Version of preferences file */
int x; /* X dimension of window when saved */
int y; /* Y dimension of window when saved */
int width; /* Width of window when saved */
int height; /* Height of window when saved */
int planguage; /* Language selected (menu) when saved, low pri */
int just; /* Justification of text, 0=Left, 1=Centre, 2=Right */
short date; /* Display date?, 0 = No, 1=Yes */
short wtf; /* Window to front ? */
int time_col[8];
int date_col[8];
short autoadjust; /* Use automatic adjustment on window ? */
char backdrop[256]; /* Backdrop image */
char pub[139]; /* Default public screen */
char accent[256]; /* Language file for tRanslate */
char tkey[100];
char hkey[100];
struct Event events[11]; /* For the alarm! */
}prefs;
int current_mode=2; /* Current selected colour mode */
APTR VisualInfo = NULL;
struct Window *Project0Wnd = NULL;
struct Gadget *Project0GList = NULL;
struct Gadget *Project0Gadgets[27];
extern Class *initGet( void );
struct IClass *getClass = NULL;
struct _Object *getImage = NULL;
UWORD Project0Left = 0;
UWORD Project0Top = 0;
UWORD Project0Width = 560;
UWORD Project0Height = 245;
UBYTE *Project0Wdt = (UBYTE *)"EngClock Prefs";
UBYTE *Lang0Labels[] = {
(UBYTE *)"English",
(UBYTE *)"Français",
(UBYTE *)"Español",
NULL };
UBYTE *Just0Labels[] = {
(UBYTE *)"Left",
(UBYTE *)"Centre",
(UBYTE *)"Right",
NULL };
UBYTE *Type0Labels[] = {
(UBYTE *)"Requester",
(UBYTE *)"Sound File",
(UBYTE *)"AmigaDOS Command",
(UBYTE *)"Speech",
NULL };
struct TextAttr topaz8 = {
( STRPTR )"topaz.font", 8, 0x00, 0x01 };
struct IntuiText Project0IText[] = {
1, 0, JAM1,213, 6, &topaz8, (UBYTE *)"Language:-", &Project0IText[1],
1, 0, JAM1,20, 6, &topaz8, (UBYTE *)"Justification:-", &Project0IText[2],
1, 0, JAM1,378, 6, &topaz8, (UBYTE *)"Alarm Settings:-", NULL };
UWORD Project0GTypes[] = {
SLIDER_KIND,
BUTTON_KIND,
BUTTON_KIND,
SLIDER_KIND,
SLIDER_KIND,
CHECKBOX_KIND,
MX_KIND,
MX_KIND,
CHECKBOX_KIND,
CHECKBOX_KIND,
STRING_KIND,
STRING_KIND,
GENERIC_KIND,
GENERIC_KIND,
SLIDER_KIND,
TEXT_KIND,
TEXT_KIND,
SLIDER_KIND,
CYCLE_KIND,
STRING_KIND,
CHECKBOX_KIND,
BUTTON_KIND,
GENERIC_KIND,
STRING_KIND,
GENERIC_KIND,
STRING_KIND,
STRING_KIND
};
struct NewGadget Project0NGad[] = {
89, 123, 184, 11, (UBYTE *)"Colours", NULL, GD_ColourSlider, PLACETEXT_LEFT, NULL, NULL,
9, 226, 106, 14, (UBYTE *)"Save", NULL, GD_But_Use, PLACETEXT_IN, NULL, NULL,
438, 226, 106, 14, (UBYTE *)"Use", NULL, GD_But_Cancel, PLACETEXT_IN, NULL, NULL,
111, 105, 102, 13, (UBYTE *)"Time Colour", NULL, GD_Time_Colour, PLACETEXT_LEFT, NULL, NULL,
113, 89, 100, 13, (UBYTE *)"Date Colour", NULL, GD_Date_Colour, PLACETEXT_LEFT, NULL, NULL,
164, 72, 26, 11, (UBYTE *)"Display Date", NULL, GD_Check_Date, PLACETEXT_RIGHT, NULL, NULL,
278, 21, 17, 9, NULL, NULL, GD_Lang, PLACETEXT_LEFT, NULL, NULL,
19, 23, 17, 9, NULL, NULL, GD_Just, PLACETEXT_RIGHT, NULL, NULL,
16, 61, 26, 11, (UBYTE *)"Auto adjust", NULL, GD_Check_Auto, PLACETEXT_RIGHT, NULL, NULL,
164, 59, 26, 11, (UBYTE *)"WindowToFront", NULL, GD_WinFront, PLACETEXT_RIGHT, NULL, NULL,
118, 141, 162, 14, (UBYTE *)"Public Screen", NULL, GD_Pub, PLACETEXT_LEFT, NULL, NULL,
76, 159, 203, 14, (UBYTE *)"Backdrop", NULL, GD_Back, PLACETEXT_LEFT, NULL, NULL,
282, 141, 20, 14, NULL, NULL, GD_Pub_Get, 0, NULL, NULL,
282, 159, 20, 14, NULL, NULL, GD_Asl_Get, 0, NULL, NULL,
387, 33, 106, 11, (UBYTE *)"Event number", NULL, GD_A_Preset, PLACETEXT_ABOVE, NULL, NULL,
334, 73, 201, 13, (UBYTE *)"Time of event", NULL, GD_Time1, PLACETEXT_ABOVE, NULL, NULL,
334, 87, 201, 13, NULL, NULL, GD_Time2, 0, NULL, NULL,
333, 103, 201, 12, NULL, NULL, GD_Time_Set, 0, NULL, NULL,
335, 131, 201, 15, (UBYTE *)"Type of event", NULL, GD_Type, PLACETEXT_ABOVE, NULL, NULL,
334, 162, 185, 14, (UBYTE *)"Parameter", NULL, GD_Msg, PLACETEXT_ABOVE, NULL, NULL,
339, 47, 26, 11, (UBYTE *)"Enable Event", NULL, GD_Enable, PLACETEXT_RIGHT, NULL, NULL,
480,47, 60,11,(UBYTE *)"Date",NULL,GD_Date,PLACETEXT_IN,NULL,NULL,
524,162,20,14,NULL,NULL,GD_GetParam,0,NULL,NULL,
134,183,384,14,(UBYTE *)"Accent Filename",NULL,GD_Accent,PLACETEXT_LEFT,NULL,NULL,
524,183,20,14,NULL,NULL,GD_GetAccent,0,NULL,NULL,
126,202,150,14,(UBYTE *)"Window hotkey",NULL,GD_HotKey,PLACETEXT_LEFT,NULL,NULL,
392,202,150,14,(UBYTE *)"Talky hotkey",NULL,GD_TalkKey,PLACETEXT_LEFT,NULL,NULL
};
ULONG Project0GTags[] = {
(GTSL_Max), 7, (GTSL_LevelPlace), (PLACETEXT_RIGHT), (PGA_Freedom), LORIENT_HORIZ, (GA_RelVerify), TRUE, (TAG_DONE),
(TAG_DONE),
(TAG_DONE),
(GTSL_Max), 1, (PGA_Freedom), LORIENT_HORIZ, (GA_Immediate), TRUE, (GA_RelVerify), TRUE, (TAG_DONE),
(GTSL_Max), 1, (PGA_Freedom), LORIENT_HORIZ, (GA_Immediate), TRUE, (GA_RelVerify), TRUE, (TAG_DONE),
(TAG_DONE),
(GTMX_Labels), (ULONG)&Lang0Labels[ 0 ], (GTMX_Spacing), 3, (TAG_DONE),
(GTMX_Labels), (ULONG)&Just0Labels[ 0 ], (GTMX_Spacing), 2, (TAG_DONE),
(TAG_DONE),
(TAG_DONE),
(GTST_MaxChars), 139, (TAG_DONE),
(GTST_MaxChars), 256, (TAG_DONE),
(TAG_DONE),
(TAG_DONE),
(GTSL_Min), 1, (GTSL_Max), 10, (GTSL_MaxLevelLen), 3, (GTSL_LevelFormat), (ULONG)"%ld", (GTSL_LevelPlace), (PLACETEXT_RIGHT), (PGA_Freedom), LORIENT_HORIZ, (GA_RelVerify), TRUE, (TAG_DONE),
(GTTX_Border), TRUE, (TAG_DONE),
(GTTX_Border), TRUE, (TAG_DONE),
(GTSL_Min),1,(GTSL_Max), 576, (GTSL_LevelPlace), (PLACETEXT_RIGHT), (PGA_Freedom), LORIENT_HORIZ, (GA_RelVerify), TRUE, (TAG_DONE),
(GTCY_Labels), (ULONG)&Type0Labels[ 0 ], (TAG_DONE),
(GTST_MaxChars), 256, (TAG_DONE),
(TAG_DONE),
(TAG_DONE),
(TAG_DONE),
(GTST_MaxChars), 256, (TAG_DONE),
(TAG_DONE),
(GTST_MaxChars), 100, (TAG_DONE)
};
int SetupScreen( void )
{
if ( ! ( VisualInfo = GetVisualInfo( pubscreen, TAG_DONE )))
return( 2L );
if ( ! ( getClass = initGet()))
return( 3L );
if ( ! ( getImage = NewObject( getClass, NULL, GT_VisualInfo, VisualInfo, TAG_DONE )))
return( 4L );
return( 0L );
}
void CloseDownScreen( void )
{
if ( getImage ) {
DisposeObject( getImage );
getImage = NULL;
}
if ( getClass ) {
FreeClass( getClass );
getClass = NULL;
}
if ( VisualInfo ) {
FreeVisualInfo( VisualInfo );
VisualInfo = NULL;
}
}
void Project0Render( void )
{
UWORD offx, offy;
offx = Project0Wnd->BorderLeft;
offy = Project0Wnd->BorderTop;
PrintIText( Project0Wnd->RPort, Project0IText, offx, offy );
}
int OpenProject0Window( void )
{
struct NewGadget ng;
struct Gadget *g;
UWORD lc, tc;
UWORD offx = pubscreen->WBorLeft, offy = pubscreen->WBorTop + pubscreen->RastPort.TxHeight + 1;
if ( ! ( g = CreateContext( &Project0GList )))
return( 1L );
for( lc = 0, tc = 0; lc < Project0_CNT; lc++ ) {
CopyMem((char * )&Project0NGad[ lc ], (char * )&ng, (long)sizeof( struct NewGadget ));
ng.ng_VisualInfo = VisualInfo;
ng.ng_TextAttr = &topaz8;
ng.ng_LeftEdge += offx;
ng.ng_TopEdge += offy;
Project0Gadgets[ lc ] = g = CreateGadgetA((ULONG)Project0GTypes[ lc ], g, &ng, ( struct TagItem * )&Project0GTags[ tc ] );
if ( Project0GTypes[ lc ] == GENERIC_KIND ) {
g->Flags |= GFLG_GADGIMAGE | GFLG_GADGHIMAGE;
g->Activation |= GACT_RELVERIFY;
g->GadgetRender = (APTR)getImage;
g->SelectRender = (APTR)getImage;
}
while( Project0GTags[ tc ] ) tc += 2;
tc++;
if ( NOT g )
return( 2L );
}
if ( ! ( Project0Wnd = OpenWindowTags( NULL,
WA_Left, Project0Left,
WA_Top, Project0Top,
WA_Width, Project0Width,
WA_Height, Project0Height + offy,
WA_IDCMP, SLIDERIDCMP|BUTTONIDCMP|CHECKBOXIDCMP|MXIDCMP|STRINGIDCMP|IDCMP_GADGETUP|TEXTIDCMP|CYCLEIDCMP|IDCMP_CLOSEWINDOW|IDCMP_REFRESHWINDOW,
WA_Flags, WFLG_DRAGBAR|WFLG_DEPTHGADGET|WFLG_CLOSEGADGET|WFLG_SMART_REFRESH|WFLG_ACTIVATE,
WA_Gadgets, Project0GList,
WA_Title, Project0Wdt,
WA_ScreenTitle, "EngClock Prefs",
WA_PubScreen, pubscreen,
TAG_DONE )))
return( 4L );
GT_RefreshWindow( Project0Wnd, NULL );
Project0Render();
return( 0L );
}
void CloseProject0Window( void )
{
if ( Project0Wnd ) {
CloseWindow( Project0Wnd );
Project0Wnd = NULL;
}
if ( Project0GList ) {
FreeGadgets( Project0GList );
Project0GList = NULL;
}
}
int prefsgui(void) {
ULONG class, code, iaddress, offx, offy;
struct IntuiMessage *msg2;
exit_flag2=FALSE;
SetupScreen();
adaptlanguage();
OpenProject0Window();
displevel(0);
drawspecial();
if(prefs.planguage > 0)
GT_SetGadgetAttrs(Project0Gadgets[GD_Lang],Project0Wnd,NULL,GTMX_Active,prefs.planguage-1,TAG_END);
GT_SetGadgetAttrs(Project0Gadgets[GD_Just],Project0Wnd,NULL,GTMX_Active,prefs.just,TAG_END);
GT_SetGadgetAttrs(Project0Gadgets[GD_Time_Colour],Project0Wnd,NULL,GTSL_Level,prefs.time_col[0],TAG_END);
GT_SetGadgetAttrs(Project0Gadgets[GD_Date_Colour],Project0Wnd,NULL,GTSL_Level,prefs.date_col[0],TAG_END);
GT_SetGadgetAttrs(Project0Gadgets[GD_Check_Date],Project0Wnd,NULL,GTCB_Checked,prefs.date,TAG_END);
GT_SetGadgetAttrs(Project0Gadgets[GD_Check_Auto],Project0Wnd,NULL,GTCB_Checked,prefs.autoadjust,TAG_END);
GT_SetGadgetAttrs(Project0Gadgets[GD_Pub],Project0Wnd,NULL,GTST_String,prefs.pub,TAG_END);
GT_SetGadgetAttrs(Project0Gadgets[GD_Back],Project0Wnd,NULL,GTST_String,prefs.backdrop,TAG_END);
GT_SetGadgetAttrs(Project0Gadgets[GD_WinFront],Project0Wnd,NULL,GTCB_Checked,prefs.wtf,TAG_END);
convertdate(prefs.events[1].timecode);
GT_SetGadgetAttrs(Project0Gadgets[GD_Time1],Project0Wnd,NULL,GTTX_Text,time1,TAG_END);
GT_SetGadgetAttrs(Project0Gadgets[GD_Time2],Project0Wnd,NULL,GTTX_Text,time2,TAG_END);
GT_SetGadgetAttrs(Project0Gadgets[GD_Msg],Project0Wnd,NULL,GTST_String,prefs.events[1].message,TAG_END);
GT_SetGadgetAttrs(Project0Gadgets[GD_Type],Project0Wnd,NULL,GTCY_Active,prefs.events[1].type,TAG_END);
GT_SetGadgetAttrs(Project0Gadgets[GD_Time_Set],Project0Wnd,NULL,GTSL_Level,prefs.events[1].timecode,TAG_END);
GT_SetGadgetAttrs(Project0Gadgets[GD_Enable],Project0Wnd,NULL,GTCB_Checked,prefs.events[1].used,TAG_END);
GT_SetGadgetAttrs(Project0Gadgets[GD_HotKey],Project0Wnd,NULL,GTST_String,prefs.hkey,TAG_END);
GT_SetGadgetAttrs(Project0Gadgets[GD_TalkKey],Project0Wnd,NULL,GTST_String,prefs.tkey,TAG_END);
if(locale) GT_SetGadgetAttrs(Project0Gadgets[GD_Lang],Project0Wnd,NULL,GA_Disabled,TRUE,TAG_END);
GT_SetGadgetAttrs(Project0Gadgets[GD_Accent],Project0Wnd,NULL,GTST_String,prefs.accent,TAG_END);
GT_RefreshWindow(Project0Wnd,NULL);
offx=Project0Wnd->BorderLeft-4;
offy=Project0Wnd->BorderTop-11;
SetAPen(Project0Wnd->RPort,prefs.time_col[0]);
RectFill(Project0Wnd->RPort,241+offx,115+offy,299+offx,125+offy);
SetAPen(Project0Wnd->RPort,prefs.date_col[0]);
RectFill(Project0Wnd->RPort,241+offx,99+offy,299+offx,109+offy);
SetAPen(Project0Wnd->RPort,1);
while(1) {
Wait(1<<Project0Wnd->UserPort->mp_SigBit);
while(msg2=(struct IntuiMessage *)GT_GetIMsg(Project0Wnd->UserPort)) {
class=msg2->Class;
code=msg2->Code;
iaddress=(ULONG)msg2->IAddress;
GT_ReplyIMsg(msg2);
switch(class) {
case CLOSEWINDOW:
goto cleanup;
break;
case GADGETUP:
case GADGETDOWN:
case MOUSEMOVE:
if(!handlepgadgets(iaddress,code))
goto cleanup;
if(exit_flag2)
goto cleanup;
break;
default:
//msg("Unknown msg!");
break;
}
}
}
cleanup:
CloseProject0Window();
CloseDownScreen();
return;
}
BOOL handlepgadgets(int iaddress, int code) {
struct Gadget *gad;
struct StringInfo *si;
char pub[139];
char *tmp=NULL;
char stuff[200];
char olddir[200];
int cols=2, i=0;
UWORD offx, offy;
BPTR thandle; /* temp handle */
offx=Project0Wnd->BorderLeft-4;
offy=Project0Wnd->BorderTop-11;
gad=(struct Gadget *)iaddress;
si=(struct StringInfo *)gad->SpecialInfo;
switch(gad->GadgetID) {
case GD_ColourSlider:
current_mode=code;
displevel(code);
for(i=0; i<code; i++) {
cols=cols*2;
}
GT_SetGadgetAttrs(Project0Gadgets[GD_Time_Colour],Project0Wnd,NULL,GTSL_Max,(cols-1),GTSL_Level,prefs.time_col[code],TAG_END);
GT_SetGadgetAttrs(Project0Gadgets[GD_Date_Colour],Project0Wnd,NULL,GTSL_Max,(cols-1),GTSL_Level,prefs.date_col[code],TAG_END);
GT_RefreshWindow(Project0Wnd,NULL);
SetAPen(Project0Wnd->RPort,prefs.time_col[code]);
RectFill(Project0Wnd->RPort,241+offx,115+offy,299+offx,125+offy);
SetAPen(Project0Wnd->RPort,prefs.date_col[code]);
RectFill(Project0Wnd->RPort,241+offx,99+offy,299+offx,109+offy);
SetAPen(Project0Wnd->RPort,1);
break;
case GD_But_Use:
writeprefs();
exit_flag2=TRUE;
return(0);
break;
case GD_But_Cancel:
exit_flag2=TRUE;
return(0);
break;
case GD_Time_Colour:
SetAPen(Project0Wnd->RPort,code);
RectFill(Project0Wnd->RPort,241+offx,115+offy,299+offx,125+offy);
SetAPen(Project0Wnd->RPort,1);
prefs.time_col[current_mode]=code;
break;
case GD_Date_Colour:
SetAPen(Project0Wnd->RPort,code);
RectFill(Project0Wnd->RPort,241+offx,99+offy,299+offx,109+offy);
SetAPen(Project0Wnd->RPort,1);
prefs.date_col[current_mode]=code;
break;
case GD_Check_Date:
prefs.date=code;
break;
case GD_Pub_Get:
tmp=NULL;
tmp=publister();
if(tmp!=(char *)1234) {
sprintf(pub,"%s",tmp);
if(strcmp(pub,"")) {
strcpy(prefs.pub,pub);
GT_SetGadgetAttrs(Project0Gadgets[GD_Pub],Project0Wnd,NULL,GTST_String,prefs.pub,TAG_DONE);
GT_RefreshWindow(Project0Wnd,NULL);
}
}
break;
case GD_Check_Auto:
prefs.autoadjust=code;
break;
case GD_Date:
getdate();
break;
case GD_Lang:
prefs.planguage=(code+1);
language=code+1;
break;
case GD_Just:
prefs.just=code;
break;
case GD_WinFront:
prefs.wtf=code;
break;
case GD_Back:
strcpy(prefs.backdrop,si->Buffer);
thandle=Open(prefs.backdrop,MODE_OLDFILE);
if(!thandle) {
DisplayBeep(NULL);
strcpy(prefs.backdrop,"");
GT_SetGadgetAttrs(Project0Gadgets[GD_Back],Project0Wnd,NULL,GTST_String,prefs.backdrop,TAG_END);
GT_RefreshWindow(Project0Wnd,NULL);
}
if(thandle) Close(thandle);
break;
case GD_Pub:
strcpy(prefs.pub,si->Buffer);
break;
case GD_Asl_Get:
// What was the old dir?
strcpy(olddir,"");
strcpy(stuff,prefs.backdrop);
for(i=strlen(stuff); i>-1; i--) {
if(stuff[i]=='/') {
stuff[i]=NULL;
strcpy(olddir,stuff);
stuff[i]='/';
break;
}
}
// Did that work?
if(!(strcmp(olddir,""))) {
// Ok, lets try :
for(i=strlen(stuff); i>-1; i--) {
if(stuff[i]==':') {
stuff[i+1]=NULL;
strcpy(olddir,stuff);
stuff[i]='/';
}
}
}
switch(language) {
case ENGLISH:
case FRENCH:
tmp=callasl(Project0Wnd,"Pick a file for the backdrop",olddir);
break;
case SPANISH:
tmp=callasl(Project0Wnd,"Elija una imagen cono fondo",olddir);
break;
default:
tmp=callasl(Project0Wnd,"Pick a file for the backdrop",olddir);
break;
}
if(tmp) {
sprintf(prefs.backdrop,"%s",tmp);
thandle=Open(prefs.backdrop,MODE_OLDFILE);
if(!thandle) {
DisplayBeep(NULL);
strcpy(prefs.backdrop,"");
GT_SetGadgetAttrs(Project0Gadgets[GD_Back],Project0Wnd,NULL,GTST_String,prefs.backdrop,TAG_END);
GT_RefreshWindow(Project0Wnd,NULL);
}
if(thandle) Close(thandle);
GT_SetGadgetAttrs(Project0Gadgets[GD_Back],Project0Wnd,NULL,GTST_String,prefs.backdrop,TAG_END);
GT_RefreshWindow(Project0Wnd,NULL);
}
break;
case GD_A_Preset:
preset=code;
convertdate(prefs.events[preset].timecode);
GT_SetGadgetAttrs(Project0Gadgets[GD_Time1],Project0Wnd,NULL,GTTX_Text,time1,TAG_END);
GT_SetGadgetAttrs(Project0Gadgets[GD_Time2],Project0Wnd,NULL,GTTX_Text,time2,TAG_END);
GT_SetGadgetAttrs(Project0Gadgets[GD_Msg],Project0Wnd,NULL,GTST_String,prefs.events[preset].message,TAG_END);
GT_SetGadgetAttrs(Project0Gadgets[GD_Type],Project0Wnd,NULL,GTCY_Active,prefs.events[preset].type,TAG_END);
GT_SetGadgetAttrs(Project0Gadgets[GD_Time_Set],Project0Wnd,NULL,GTSL_Level,prefs.events[preset].timecode,TAG_END);
GT_SetGadgetAttrs(Project0Gadgets[GD_Enable],Project0Wnd,NULL,GTCB_Checked,prefs.events[preset].used,TAG_END);
GT_RefreshWindow(Project0Wnd,NULL);
break;
case GD_Time_Set:
/* code 0 = It's just gone one o'clock (am) */
/* If code is even, It's Just gone
if code is odd, Its nearly */
/* Reset */
prefs.events[preset].hours=0;
prefs.events[preset].minutes=0;
prefs.events[preset].timecode=code;
convertdate(code);
GT_SetGadgetAttrs(Project0Gadgets[GD_Time1],Project0Wnd,NULL,GTTX_Text,time1,TAG_END);
GT_SetGadgetAttrs(Project0Gadgets[GD_Time2],Project0Wnd,NULL,GTTX_Text,time2,TAG_END);
GT_RefreshWindow(Project0Wnd,NULL);
break;
case GD_Type:
prefs.events[preset].type=code;
break;
case GD_Msg:
strcpy(prefs.events[preset].message,si->Buffer);
break;
case GD_Enable:
prefs.events[preset].used=code;
break;
case GD_GetParam:
// What was the old dir?
strcpy(olddir,"");
strcpy(stuff,prefs.events[preset].message);
for(i=strlen(stuff); i>-1; i--) {
if(stuff[i]=='/') {
stuff[i]=NULL;
strcpy(olddir,stuff);
stuff[i]='/';
break;
}
}
// Did that work?
if(!(strcmp(olddir,""))) {
// Ok, lets try :
for(i=strlen(stuff); i>-1; i--) {
if(stuff[i]==':') {
stuff[i+1]=NULL;
strcpy(olddir,stuff);
stuff[i]='/';
}
}
}
strcpy(prefs.events[preset].message,callasl(Project0Wnd,"Select a file as a parameter for your event",olddir));
if(prefs.events[preset].type==1) // Sound
strcpy(prefs.events[preset].message,analysis(prefs.events[preset].message));
GT_SetGadgetAttrs(Project0Gadgets[GD_Msg],Project0Wnd,NULL,GTST_String,prefs.events[preset].message,TAG_END);
GT_RefreshWindow(Project0Wnd,NULL);
break;
case GD_Accent:
strcpy(prefs.accent,si->Buffer);
thandle=Open(prefs.accent,MODE_OLDFILE);
if(!thandle) {
DisplayBeep(NULL);
strcpy(prefs.accent,"");
GT_SetGadgetAttrs(Project0Gadgets[GD_Accent],Project0Wnd,NULL,GTST_String,prefs.accent,TAG_END);
GT_RefreshWindow(Project0Wnd,NULL);
}
if(thandle) Close(thandle);
break;
case GD_GetAccent:
tmp=callasl(Project0Wnd,"Choose your accent","LOCALE:Accents");
if(tmp) {
sprintf(prefs.accent,"%s",tmp);
thandle=Open(prefs.accent,MODE_OLDFILE);
if(!thandle) {
DisplayBeep(NULL);
strcpy(prefs.accent,"");
GT_SetGadgetAttrs(Project0Gadgets[GD_Accent],Project0Wnd,NULL,GTST_String,prefs.accent,TAG_END);
GT_RefreshWindow(Project0Wnd,NULL);
}
if(thandle) Close(thandle);
GT_SetGadgetAttrs(Project0Gadgets[GD_Accent],Project0Wnd,NULL,GTST_String,prefs.accent,TAG_END);
GT_RefreshWindow(Project0Wnd,NULL);
}
break;
case GD_HotKey:
strcpy(prefs.hkey,si->Buffer);
break;
case GD_TalkKey:
strcpy(prefs.tkey,si->Buffer);
break;
}
return(1);
}
short displevel(int code) {
UWORD offx, offy;
int i=0, cols=2;
char text[5];
offx=Project0Wnd->BorderLeft-4;
offy=Project0Wnd->BorderTop-11;
for(i=0; i<code; i++) {
cols=cols*2;
}
sprintf(text,"%ld",cols);
level_text.IText=text;
SetAPen(Project0Wnd->RPort,0);
RectFill(Project0Wnd->RPort,293+offx,131+offy,320+offx,142+offy);
SetAPen(Project0Wnd->RPort,1);
PrintIText(Project0Wnd->RPort,&level_text,offx,offy);
return(1);
}
short drawspecial(void) {
UWORD offx, offy;
offx=Project0Wnd->BorderLeft-4;
offy=Project0Wnd->BorderTop-11;
/* Outline to time colour */
Move(Project0Wnd->RPort,240+offx,98+offy);
Draw(Project0Wnd->RPort,300+offx,98+offy);
Move(Project0Wnd->RPort,300+offx,98+offy);
Draw(Project0Wnd->RPort,300+offx,110+offy);
Move(Project0Wnd->RPort,300+offx,110+offy);
Draw(Project0Wnd->RPort,240+offx,110+offy);
Move(Project0Wnd->RPort,240+offx,110+offy);
Draw(Project0Wnd->RPort,240+offx,98+offy);
/* Ouline to date colour */
Move(Project0Wnd->RPort,240+offx,114+offy);
Draw(Project0Wnd->RPort,300+offx,114+offy);
Move(Project0Wnd->RPort,300+offx,114+offy);
Draw(Project0Wnd->RPort,300+offx,126+offy);
Move(Project0Wnd->RPort,300+offx,126+offy);
Draw(Project0Wnd->RPort,240+offx,126+offy);
Move(Project0Wnd->RPort,240+offx,126+offy);
Draw(Project0Wnd->RPort,240+offx,114+offy);
return(1);
}
short writeprefs(void) {
int bytes;
handle2=Open(PREFS_FILE,MODE_READWRITE);
if (!handle2) {
DisplayBeep(0L);
return(0); }
/* First update the prefs structure */
prefs.vers=VERS; /* Current version of prefs file format */
strcpy(prefs.header,ID); /* Header */
prefs.x=win_p->LeftEdge;
prefs.y=win_p->TopEdge;
prefs.width=win_p->Width;
prefs.height=win_p->Height;
/* Note that the planguage element does not need to be updated */
bytes=FWrite(handle2,(char *)&prefs,1,sizeof(prefs));
if(bytes!=sizeof(prefs))
/* File was not written properly! */
DisplayBeep(NULL);
Close(handle2);
return(0);
}
char *callasl(struct Window *win, char *title, char *initialdir) {
struct FileRequester *fr;
char buffer2[200];
struct TagItem tags[] = {
ASL_Hail,(ULONG)NULL,
ASL_Pattern,(ULONG)"#?",
ASL_FuncFlags,FILF_PATGAD,
ASL_Window,(ULONG)NULL,
ASL_Dir,(ULONG)NULL,
TAG_DONE
};
if(!(AslBase=OpenLibrary("asl.library",0)))
return(NULL);
tags[0].ti_Data=(ULONG)title;
tags[3].ti_Data=(ULONG)win;
tags[4].ti_Data=(ULONG)initialdir;
fr=(struct FileRequester *)AllocAslRequest(ASL_FileRequest,&tags[0]);
if(!fr) {
msg("Unable to open asl requester!");
CloseLibrary(AslBase);
return(0);
}
if(!AslRequest(fr,NULL)) {
FreeAslRequest(fr);
CloseLibrary(AslBase);
return(0);
}
sprintf(buffer,"%s",fr->rf_Dir);
sprintf(buffer2,"%s",fr->rf_File);
if(buffer[strlen(buffer)-1]!=':' && buffer[strlen(buffer)-1]!='/' ) {
/* No device name nor trailing slash */
if(strcmp(buffer,"")) {
/* Make sure something is in there */
strcat(buffer,"/");
}
}
strcat(buffer,buffer2);
FreeAslRequest(fr);
CloseLibrary(AslBase);
return(&buffer[0]);
}
void adaptlanguage(void) {
switch(language) {
case ENGLISH:
break;
case FRENCH:
Just0Labels[0]="Gauche";
Just0Labels[1]="Droit";
Just0Labels[2]="Centre";
Type0Labels[0]="Demander";
Type0Labels[1]="Bruit (IFF)";
Type0Labels[2]="Ordre (AmigaDOS)";
Type0Labels[3]="Parole";
Project0IText[0].IText="Langue";
Project0IText[1].IText="Justification";
Project0IText[2].IText="Réveille-matin:-";
Project0NGad[0].ng_GadgetText="Couleurs";
Project0NGad[1].ng_GadgetText="Sauver";
Project0NGad[2].ng_GadgetText="Emploi";
Project0NGad[3].ng_GadgetText="Couleur(date)";
Project0NGad[4].ng_GadgetText="Couleur(temp)";
Project0NGad[5].ng_GadgetText="Date ?";
Project0NGad[8].ng_GadgetText="Automatique";
Project0NGad[10].ng_GadgetText="écran (pub)";
Project0NGad[11].ng_GadgetText="Image";
Project0NGad[9].ng_GadgetText="Fenêtre á face";
Project0NGad[14].ng_GadgetText="Nombre";
Project0NGad[15].ng_GadgetText="Temps";
Project0NGad[18].ng_GadgetText="Type";
Project0NGad[19].ng_GadgetText="Texte";
Project0NGad[20].ng_GadgetText="Emploi cas?";
break;
case SPANISH:
Just0Labels[0]="A la Izquierdo";
Just0Labels[2]="A la Derecho";
Just0Labels[1]="Centrado";
Type0Labels[0]="Petición";
Type0Labels[1]="Sonido (IFF)";
Type0Labels[2]="Orden (AmigaDOS)";
Type0Labels[3]="Habla";
Project0IText[0].IText="Lenguaje";
Project0IText[1].IText="Justificado Texto";
Project0IText[2].IText="Despertador";
Project0NGad[0].ng_GadgetText="Nº Colores";
Project0NGad[1].ng_GadgetText="Guardar";
Project0NGad[2].ng_GadgetText="Usar";
Project0NGad[3].ng_GadgetText="Color (Hora)";
Project0NGad[4].ng_GadgetText="Color (Fecha)";
Project0NGad[5].ng_GadgetText="Monstrar Fecha";
Project0NGad[8].ng_GadgetText="Auto Ajuste";
Project0NGad[10].ng_GadgetText="PantPública";
Project0NGad[11].ng_GadgetText="Imagen";
Project0NGad[9].ng_GadgetText="Primer Plano";
Project0NGad[14].ng_GadgetText="NÚmero";
Project0NGad[19].ng_GadgetText="Texto";
Project0NGad[20].ng_GadgetText="Suceso ?";
Project0NGad[21].ng_GadgetText="Fecha";
Project0NGad[15].ng_GadgetText="Tiempo";
Project0NGad[18].ng_GadgetText="Tipo";
break;
}
}
void convertdate(int code) {
int tme,i,hours_count;
BOOL pm,odd=FALSE;
tme=(code/2)*2;
if(code!=tme)
strcpy(time1,"Just gone ");
else {
strcpy(time1,"Nearly ");
odd=TRUE;
tme++;
};
hours_count=1;
while (tme > 24) {
tme=tme-24;
hours_count++;
}
if(hours_count==25) hours_count=1;
tme=(tme/2)*5;
if(tme == 60) { tme=0; hours_count++; }
pm=FALSE;
if(hours_count > 12) {
pm=TRUE;
hours_count+= - 12;
}
if(hours_count == 12) {
if(pm) pm=FALSE; else pm=TRUE;
}
if (tme !=0) strcat(time1,engnums[tme]);
prefs.events[preset].minutes=tme;
if(odd) prefs.events[preset].minutes+= -2;
if (tme !=0) strcat(time1," ");
if (tme !=0) {
if(tme <= 30)
strcat(time1,"past ");
else {
strcat(time1,"to ");
}
}
/* if(tme>30) prefs.events[preset].hours=hours_count+1;
else */
prefs.events[preset].hours=hours_count;
if(prefs.events[preset].minutes==-2) {
prefs.events[preset].hours--;
prefs.events[preset].minutes=58;
if(prefs.events[preset].hours==-1)
prefs.events[preset].hours=23;
}
if(prefs.events[preset].hours==25)
prefs.events[preset].hours=0;
if(tme>30 && hours_count==12) {
hours_count=0;
prefs.events[preset].hours=0;
}
if(hours_count==13) {
hours_count=1;
prefs.events[preset].hours=1;
}
if(tme>30) strcat(time1,engnums[hours_count+1]);
else
strcat(time1,engnums[hours_count]);
if(hours_count==11 && tme>30) {
if(pm) pm=FALSE;
else
pm=TRUE;
}
if(!pm) {
if(hours_count==11) {
if(tme >30) {
prefs.events[preset].hours+=12;
}
if(hours_count==12) {
prefs.events[preset].hours+=12;
}
}
}
if(pm==0 && prefs.events[preset].hours==12) prefs.events[preset].hours=0;
if(pm) prefs.events[preset].hours+=12;
if(prefs.events[preset].hours==25) prefs.events[preset].hours=1;
if(prefs.events[preset].hours==24) prefs.events[preset].hours=0;
if(pm) strcat(time1," (pm)"); else strcat(time1," (am)");
switch(language) {
case ENGLISH:
break;
case FRENCH:
strcpy(time1,""); /* Clear out English */
if(prefs.events[preset].hours>12) {
pm=TRUE;
prefs.events[preset].hours+=-12;
} else
pm=FALSE;
tme=(prefs.events[preset].minutes/5)*5;
if((prefs.events[preset].minutes-tme)>2)
strcat(time1,"Bientôt ");
if(prefs.events[preset].minutes<=32) {
strcat(time1,engnums[prefs.events[preset].hours]);
}
else {
if(prefs.events[preset].hours==12) {
strcat(time1,engnums[1]); }
else {
strcat(time1,engnums[prefs.events[preset].hours+1]);
}
}
strcat(time1," heures");
if(prefs.events[preset].minutes>2 & prefs.events[preset].minutes<58) {
strcat(time1," ");
if(prefs.events[preset].minutes>32)
strcat(time1,"moins ");
if((prefs.events[preset].minutes-tme)<=2)
strcat(time1,engnums[(prefs.events[preset].minutes/5)*5]);
else
strcat(time1,engnums[((prefs.events[preset].minutes/5)+1)*5]);
}
if((prefs.events[preset].minutes-tme)<=2)
strcat(time1," passées");
if(pm) {
prefs.events[preset].hours+=12;
strcat(time1," (pm)");
} else
strcat(time1," (am)");
break;
case SPANISH:
strcpy(time1,""); /* Clear out English */
if(prefs.events[preset].hours>12) {
pm=TRUE;
prefs.events[preset].hours+=-12;
} else
pm=FALSE;
if(odd) strcpy(time1,"Aproximadamente ");
tme=(prefs.events[preset].minutes/5)*5;
if(prefs.events[preset].minutes<=32)
strcat(time1,engnums[prefs.events[preset].hours]);
else {
if(prefs.events[preset].hours==12)
strcat(time1,engnums[1]);
else
strcat(time1,engnums[prefs.events[preset].hours+1]);
}
if(prefs.events[preset].minutes>2 & prefs.events[preset].minutes<58) {
if(prefs.events[preset].minutes<=32)
strcat(time1," y");
else
strcat(time1," menos");
strcat(time1," ");
if((prefs.events[preset].minutes-tme)<=2) {
strcat(time1,engnums[(prefs.events[preset].minutes/5)*5]); }
else {
strcat(time1,engnums[((prefs.events[preset].minutes/5)+1)*5]); }
}
if(pm) {
prefs.events[preset].hours+=12;
strcat(time1," (pm)");
} else
strcat(time1," (am)");
break;
default:
break;
}
if(strlen(time1) > 23) {
for(i=0; i<22; i++) {
time2[i]=time1[24+i];
}
time2[i+1]=0L;
} else
strcpy(time2,"");
}
/* The meaning of life is simple, its just that I can't think of it at the
moment. */